package ar.edu.unsam.algo3.plantasvszombies.dominio

import java.util.Stack
import org.uqbar.commons.model.UserException
import org.uqbar.commons.utils.Observable

@Observable
class Fila {
	@Property Stack<Planta> plantas = new Stack<Planta>
	@Property JardinZen jardinZen
	@Property Jardin jardin

	def eliminarPlanta(Planta planta) {
		plantas.remove(planta)
	}

	def String getTipo() {
		jardinZen.tipo
	}

	def boolean isPermitePlantar(Planta planta) {
		if(jardinZen == null) throw new UserException("No hay asociado un jardin zen")
		if(lugaresDisponibles <= 0) throw new UserException("No hay lugar para plantar")
		true
	}

	def Planta PlantaDeAtaque() {
		if(plantas.empty) throw new UserException("La fila esta vacia")
		plantas.peek
	}

	def boolean agregarPlanta(Planta planta) {
		isPermitePlantar(planta)
		plantas.add(planta)
	}

	def int getAtaqueTotal() {
		var int cantidad = 0
		for (Planta p : plantas) {
			cantidad = cantidad + p.ataque
		}
		cantidad
	}

	def int getLugaresDisponibles() {
		var cantidad = jardin.lugaresPorFila - plantas.size
		if(cantidad < 0) cantidad = 0
		cantidad
	}

	def int getDefensaTotal() {
		var int cantidad = 0
		for (Planta p : plantas) {
			cantidad = cantidad + p.defensa
		}
		cantidad
	}

	def int getSaludTotal() {
		var int cantidad = 0
		for (Planta p : plantas) {
			cantidad = cantidad + p.salud
		}
		cantidad
	}

}
